package cn.szsys.integration.dto;

import cn.szsys.integration.ex.BusinessException;
import cn.szsys.integration.ex.enums.ExceptionEnum;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * @author Ryan
 * @since 2025-05-17
 **/
@Data
public class ZsxyInvestmentResDTO implements Serializable {

    // 定义一个静态映射表，集中管理 code 和 ExceptionEnum 的映射关系
    protected static final Map<String, ExceptionEnum> CODE_EXCEPTION_MAP = new HashMap<>();

    static {
        CODE_EXCEPTION_MAP.put("101", ExceptionEnum.PARAM_ERROR);
        CODE_EXCEPTION_MAP.put("103", ExceptionEnum.CHANNEL_STATUS_ERROR);
        CODE_EXCEPTION_MAP.put("104", ExceptionEnum.NETWORK_STATUS_ERROR);
        CODE_EXCEPTION_MAP.put("105", ExceptionEnum.CHANNEL_STATUS_ERROR);
        CODE_EXCEPTION_MAP.put("107", ExceptionEnum.NETWORK_STATUS_ERROR);
        CODE_EXCEPTION_MAP.put("108", ExceptionEnum.NETWORK_STATUS_ERROR);
        CODE_EXCEPTION_MAP.put("109", ExceptionEnum.NETWORK_STATUS_ERROR);
        CODE_EXCEPTION_MAP.put("110", ExceptionEnum.QUERY_NOT_RESULT);
        CODE_EXCEPTION_MAP.put("500", ExceptionEnum.OP_FAIL);
    }

    @JsonProperty("code")
    private String code;
    @JsonProperty("orderNo")
    private String orderNo;
    @JsonProperty("charge")
    private Boolean charge;
    @JsonProperty("data")
    private JSONObject data;
    @JsonProperty("pcode")
    private String pcode;
    @JsonProperty("param")
    private Object param;
    @JsonProperty("time")
    private String time;
    @JsonProperty("message")
    private String message;

    public boolean isSuccess() {
        return Objects.equals("100", this.getCode());
    }


    /**
     * 不成功返回错误
     *
     * @return {@link JSONObject}
     * @author Ryan
     */
    public JSONObject returnData() {
        if (isSuccess()) {
            return getData();
        }
        throw new BusinessException(CODE_EXCEPTION_MAP.get(getCode()));
    }
}
